package com.itheima.stock.service;

import com.itheima.stock.common.domain.InnerBlockDomain;
import com.itheima.stock.common.domain.InnerMarketDomian;
import com.itheima.stock.common.domain.InnerRtDomain;
import com.itheima.stock.common.domain.InnerRtTimeDomian;
import com.itheima.stock.pojo.StockBusiness;
import com.itheima.stock.vo.resp.PageResult;
import com.itheima.stock.vo.resp.R;

import javax.servlet.http.HttpServletResponse;
import java.util.List;
import java.util.Map;

public interface StockService {
    /*
    查询所有股票主营业务信息
     */
    R<List<StockBusiness>> findAllBusiness();

    /**
     *需求说明: 沪深两市板块分时行情数据查询，以交易时间和交易总金额降序查询，取前10条数据
     * @return
     */
    R<List<InnerMarketDomian>> getInnerMarketDomain();

    /**
     *需求说明: 沪深两市板块分时行情数据查询，以交易时间和交易总金额降序查询，取前10条数据
     * @return
     */
    R<List<InnerBlockDomain>> getInnerBlockDomain();

    /**
     * 功能描述：沪深两市个股涨幅分时行情数据查询，以时间顺序和涨幅查询前10条数据
     * @return
     */
    R<List<InnerRtDomain>> getInnerRtDomain();

    /**
     *沪深两市个股行情列表查询 ,以时间顺序和涨幅排序分页查询
     * @param page 当前页
     * @param pageSize 每页条数
     * @return 响应给前端数据
     */
    R<PageResult<InnerRtDomain>> getStockAll(Integer page, Integer pageSize);
    /**
     * 功能描述：沪深两市涨跌停分时行情数据查询，查询T日每分钟的涨跌停数据（T：当前股票交易日）
     * 		查询每分钟的涨停和跌停的数据的同级；
     * 		如果不在股票的交易日内，那么就统计最近的股票交易下的数据
     * 	 map:
     * 	    upList:涨停数据统计
     * 	    downList:跌停数据统计
     * @return
     */
    R<Map> getStockUpdownCount();
    /**
     * 涨幅榜数据分页导出到excel
     * @param response 用于响应excel文件
     * @param page 当前页
     * @param pageSize 每页大小
     */
    void getExport(HttpServletResponse response, Integer page, Integer pageSize);

    /**
     *
     * @return
     */
    R<Map> getStockTradevol();
    /**
     *统计在当前时间下（精确到分钟），股票在各个涨跌区间的数量
     * @return
     *   响应数据格式：
     *   {
     *     "code": 1,
     *     "data": {
     *         "time": "2021-12-31 14:58:00",
     *         "infos": [
     *             {
     *                 "count": 17,
     *                 "title": "-3~0%"
     *             };...
     *            }
     *  }
     */
    R<Map> getStockUpdown();
    /**
     *个股分时行情
     * 查询单个个股的分时行情数据，查询时间周期是T日开盘到当前时间
     * @param code 个股编码
     * @return
     * 返回数据格式：
     * {
     *     "code": 1,
     *     "data": [
     *         {
     *             "date": "202112310925",//当前时间，精确到分钟
     *             "tradeAmt": 63263,//当前交易量
     *             "code": "000021",//股票编码
     *             "lowPrice": 15.85,//最低价格
     *             "preClosePrice": 15.85,//前收盘价格
     *             "name": "深科技",//股票名称
     *             "highPrice": 15.85,//最高价格
     *             "openPrice": 15.85,//开盘价
     *             "tradeVol": 1002718.55,//交易金额
     *             "tradePrice": 15.85//当前价格（最新价格）
     *         },....
     *  }
     */
    R<List<InnerRtTimeDomian>> getStockScreenTime(String code);
    /**
     *单个个股日K数据查询 ，可以根据时间区间查询数日的K线数据
     *默认查询历史20天的数据；
     * @param code 个股编码
     * @return
     * 数据结构：
     * {
     *     "code": 1,
     *     "data": [
     *         {
     *             "date": "20211220",//日期
     *             "tradeAmt": 28284252,//交易量(指收盘时的交易量，如果当天未收盘，则显示最新数据)
     *             "code": "000021",//股票编码
     *             "lowPrice": 16,//最低价格（指收盘时记录的最低价，如果当天未收盘，则显示最新数据）
     *             "name": "深科技",//名称
     *             "highPrice": 16.83,//最高价（指收盘时记录的最高价，如果当天未收盘，则显示最新数据）
     *             "openPrice": 16.8,//开盘价
     *             "tradeVol": 459088567.58,//交易金额（指收盘时记录交易量，如果当天未收盘，则显示最新数据）
     *             "closePrice": 16.81//当前收盘价（指收盘时的价格，如果当天未收盘，则显示最新cur_price）
     *             "preClosePrice": 16.81//前收盘价
     *         },
     *         //......
     *     ]
     * }
     */
    R<List<InnerRtTimeDomian>> getStockScreenDay(String code);
}
